﻿using CodeAgent.Host.Functions;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Agents;
using Microsoft.SemanticKernel.Connectors.OpenAI;
#pragma warning disable SKEXP0010

#pragma warning disable SKEXP0110

namespace CodeAgent.Host.Agents;

public class AdminAgent
{
    public static ChatCompletionAgent CreateAdminAgent(AgentOption option, string model)
    {
        var kernelBuilder = Kernel.CreateBuilder();

        kernelBuilder.Plugins.AddFromType<ChatFunction>();

        kernelBuilder.AddOpenAIChatCompletion(model, option.Endpoint, option.ApiKey);

        var kernel = kernelBuilder.Build();


        const string reviewAgentName = "AdminAgent";
        const string reviewInstruction =
            """
            您是管理员，您的职责是协调群聊中的各个成员，根据需要调整对话流程，确保对话的顺利进行。
            - 当需要对需求进行确认时，通知用户，等待用户的回复。
            - 对每一个业务操作，您都需要确认用户的需求是否满足，以保证对话的顺利进行。
            - 对群成员完成的内容判断是否满足用户的需求，如果不满足，您需要通知对应的成员进行修改。
            - 您不要提供实现和解决内容。您的职责是协调和审核，不要直接提供解决方案。
            - 您需要用户的需求判断需要通知哪些成员，它可能只是一些简单的问题，如果不牵扯到其他的成员，您可以直接回答。
            - 如果所有的任务和需求都符合用户要求，并且结果也没有异常，那么请直接输出[done],如果没有完成请根据需求调度其他成员。
            """;
        var codeReviewAgent = new ChatCompletionAgent()
        {
            Name = reviewAgentName,
            Instructions = reviewInstruction,
            Kernel = kernel,
            Description = "Admin Agent",
            Arguments = new KernelArguments(new OpenAIPromptExecutionSettings()
            {
                FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
            }),
        };

        return codeReviewAgent;
    }
}